<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Java技术站</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
    <style>
        html, body {
            font-family: 'PingFang SC', Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #F7F9FC;
            color: #333;
            line-height: 1.6;
            overflow-x: hidden;
            box-sizing: border-box;
            padding-bottom: 100px;
        }

        *, *:before, *:after {
            box-sizing: inherit;
        }

        /* 顶部 */
        .top-bar {
            background: linear-gradient(135deg, #7B68EE, #4A90E2);
            padding: 15px 20px;
            display: flex;
            justify-content: center;
            align-items: center;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
            position: fixed;
            width: 100%;
            top: 0;
            z-index: 1000;
        }

        .top-bar h1 {
            margin: 0;
            font-size: 1.8em;
            color: white;
        }

        /* 导航 */
        nav {
            background-color: #FFFFFF;
            padding: 15px 0;
            position: fixed;
            top: 60px;
            width: 100%;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
            z-index: 999;
        }

        nav .hamburger {
            display: none;
            font-size: 1.5em;
            color: #4A90E2;
            padding: 10px 15px;
            cursor: pointer;
        }

        nav ul {
            list-style-type: none;
            padding: 0;
            display: flex;
            justify-content: center;
            margin: 0;
            flex-wrap: wrap;
        }

        nav li {
            position: relative;
            margin: 0 8px;
        }

        nav a {
            text-decoration: none;
            color: #4A90E2;
            font-weight: bold;
            padding: 10px 12px;
            display: flex;
            align-items: center;
            transition: color 0.3s;
            font-size: 0.9em;
        }

        nav a:hover {
            color: #F5A623;
        }

        nav i {
            margin-right: 8px;
        }

        nav .dropdown {
            display: none;
            position: absolute;
            background-color: #FFFFFF;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
            min-width: 150px;
            top: 100%;
            left: 0;
            border-radius: 8px;
        }

        nav li:hover .dropdown {
            display: block;
        }

        nav .dropdown a {
            padding: 10px;
            color: #4A90E2;
            font-weight: normal;
        }

        nav .dropdown a:hover {
            background-color: #E9F1FF;
            color: #F5A623;
        }

        /* 内容区 */
        .container {
            max-width: 1200px;
            margin: 120px auto 20px;
            display: flex;
            gap: 20px;
            padding: 0 20px;
            flex-direction: row;
        }

        main {
            flex: 3;
        }

        aside {
            width: 25%;
            flex-shrink: 0;
        }

        .section {
            background-color: #FFFFFF;
            padding: 20px;
            margin-bottom: 20px;
            border-radius: 15px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
            margin-top: 30px;
        }

        .section h2 {
            color: #4A90E2;
            font-size: 1.8em;
            margin: 0 0 15px;
            display: flex;
            align-items: center;
        }

        .section h2 i {
            margin-right: 8px;
        }

        /* 文章 */
        .article {
            padding: 15px;
            border-radius: 10px;
            background-color: #F9FBFF;
            margin-bottom: 15px;
            transition: all 0.3s;
        }

        .article.hidden {
            display: none; /* 隐藏未加载的文章 */
        }

        .article:hover {
            background-color: #E9F1FF;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
        }

        .article h3 {
            margin: 0 0 10px;
            font-size: 1.4em;
        }

        .article a {
            color: #4A90E2;
            text-decoration: none;
        }

        .article a:hover {
            color: #F5A623;
        }

        .article-meta {
            font-size: 0.85em;
            color: #666;
            margin: 5px 0;
        }

        .article-tags a {
            display: inline-block;
            padding: 5px 10px;
            margin-right: 5px;
            background-color: #E9F1FF;
            color: #4A90E2;
            border-radius: 12px;
            text-decoration: none;
            font-size: 0.8em;
        }

        .article-share a {
            color: #7B68EE;
            margin-right: 10px;
            transition: color 0.3s;
            font-size: 1.2em;
        }

        .article-share a:hover {
            color: #F5A623;
        }

        /* 加载图标和无内容提示 */
        .loading {
            display: none;
            text-align: center;
            padding: 20px;
            font-size: 1.5em;
            color: #4A90E2;
        }

        .no-more {
            display: none;
            text-align: center;
            padding: 20px;
            color: #666;
            font-size: 1em;
        }

        /* 侧边栏 */
        aside .section {
            padding: 15px;
        }

        aside ul {
            list-style-type: none;
            padding: 0;
        }

        aside li {
            margin: 8px 0;
        }

        aside a {
            color: #4A90E2;
            text-decoration: none;
            transition: color 0.3s;
        }

        aside a:hover {
            color: #F5A623;
        }

        /* 页脚 */
        footer {
            background: linear-gradient(135deg, #7B68EE, #4A90E2);
            color: white;
            padding: 20px;
            text-align: center;
            border-radius: 15px 15px 0 0;
            margin-top: 20px;
            width: 100%;
            position: relative;
            z-index: 1;
        }

        footer .social a {
            color: #F5A623;
            margin: 0 10px;
            font-size: 1.4em;
            transition: color 0.3s;
        }

        footer .social a:hover {
            color: #FF7F50;
        }

        /* 响应式设计 */
        @media screen and (max-width: 768px) {
            .top-bar h1 {
                font-size: 1.4em;
            }

            nav {
                top: 50px;
                padding: 10px 0;
            }

            nav .hamburger {
                display: block;
                position: absolute;
                left: 10px;
                top: 10px;
            }

            nav ul {
                display: none;
                flex-direction: column;
                align-items: center;
                background-color: #FFFFFF;
                width: 100%;
                padding: 10px 0;
            }

            nav ul.active {
                display: flex;
            }

            nav li {
                margin: 5px 0;
                width: 100%;
                text-align: center;
            }

            nav a {
                font-size: 1em;
                padding: 8px;
            }

            nav .dropdown {
                position: static;
                box-shadow: none;
                background-color: #F7F9FC;
                border-radius: 0;
                width: 100%;
                display: none;
            }

            nav li:hover .dropdown {
                display: none;
            }

            nav li.active .dropdown {
                display: block;
            }

            .container {
                max-width: 100%;
                flex-direction: column;
                margin-top: 100px;
                padding: 0 5px;
                gap: 10px;
            }

            main {
                flex: 1;
                width: 100%;
            }

            aside {
                width: 100%;
            }

            .section {
                padding: 15px;
                margin-top: 20px;
            }

            .section h2 {
                font-size: 1.5em;
            }

            .article h3 {
                font-size: 1.2em;
            }

            .article-meta {
                font-size: 0.8em;
            }

            .article-tags a {
                font-size: 0.75em;
                padding: 4px 8px;
            }

            footer {
                padding: 15px;
                margin-top: 30px;
            }

            footer .social a {
                font-size: 1.2em;
            }
        }

        @media screen and (max-width: 480px) {
            .top-bar h1 {
                font-size: 1.2em;
            }

            nav a {
                font-size: 0.9em;
            }

            .section h2 {
                font-size: 1.3em;
            }

            .article h3 {
                font-size: 1.1em;
            }
        }
    </style>
</head>
<body>
<div class="top-bar">
    <h1>Java技术站</h1>
</div>
<nav>
    <div class="hamburger">
        <i class="fas fa-bars"></i>
    </div>
    <ul>
        <li><a href="#"><i class="fas fa-code"></i> 核心Java</a>
            <div class="dropdown">
                <a href="java-new-index.html">Java新特性</a>
                <a href="java-concurrency-index.html">并发编程</a>
                <a href="java-base-index.html">java基础</a>
                <a href="java-jvm-index.html">JVM</a>
            </div>
        </li>
        <li><a href="#"><i class="fas fa-leaf"></i> Spring框架</a>
            <div class="dropdown">
                <a href="springboot-index.html">Spring Boot</a>
                <a href="#">Spring Security</a>
            </div>
        </li>
        <li><a href="#"><i class="fas fa-database"></i> 持久化技术</a>
            <div class="dropdown">
                <a href="mysql-index.html">Mysql</a>
                <a href="#">JPA</a>
            </div>
        </li>
        <li><a href="#"><i class="fas fa-tools"></i> 工具</a>
            <div class="dropdown">
                <a href="sentinel-index.html">Sentinel限流工具</a>
            </div>
        </li>
        <li><a href="#"><i class="fas fa-cloud"></i> 微服务与云</a>
            <div class="dropdown">
                <a href="#">Quarkus</a>
                <a href="#">Spring Cloud</a>
            </div>
        </li>
        <li><a href="#"><i class="fas fa-file"></i> 源码研究</a>
            <div class="dropdown">
                <a href="xxljob-sourcel-index.html">XXL-JOB</a>
                <a href="sentinel-index.html">Sentinel</a>
            </div>
        </li>
        <li><a href="online-issues-index.html"><i class="fas fa-bug"></i> 线上问题记录</a>
            <div class="dropdown">
                <a href="#">JUnit</a>
                <a href="#">Mockito</a>
            </div>
        </li>
    </ul>
</nav>
<div class="container">
    <main>
        <section class="section about">
            <h2><i class="fas fa-user-circle"></i> 关于我</h2>
            <p>我是felix，一名Java程序员，专注于分享核心Java、Spring Boot和微服务的经验，助你成为更好的开发者。</p>
        </section>
        <section class="section articles">
            <h2><i class="fas fa-book-open"></i> 最新文章</h2>
            <div class="article">
                <h3><a href="c/20250411171835.html">XXL-JOB任务调度源码分析</a></h3>
                <div class="article-meta">发布于：2025-04-11</div>
                <p>通过源码分析xxl-job是如何进行任务调度的。</p>
                <div class="article-tags">
                    <a href="xxljob-sourcel-index.html">XXL-JOB</a>
                    <a href="#">源码分析</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>
            <div class="article">
                <h3><a href="c/20250411161955.html">XXL-JOB原理及任务注册与心跳源码分析</a></h3>
                <div class="article-meta">发布于：2025-04-11</div>
                <p>xxl-job的原理，通过源码分析客户端是如何注册任务，以及心跳的机制。</p>
                <div class="article-tags">
                    <a href="xxljob-sourcel-index.html">XXL-JOB</a>
                    <a href="#">源码分析</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>

            <div class="article">
                <h3><a href="c/20250217101146.html">开源版Sentinel改造逻辑和主要代码</a></h3>
                <div class="article-meta">发布于：2025-02-17</div>
                <p>改造方向：配置规则数据持久化、服务注册发现、高可用改造，包含核心代码解析。</p>
                <div class="article-tags">
                    <a href="sentinel-index.html">Sentinel</a>
                    <a href="sentinel-index.html">限流</a>
                    <a href="#">源码改造</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>
            <div class="article">
                <h3><a href="c/20250107212446.html">Sentinel限流工具接入文档</a></h3>
                <div class="article-meta">发布于：2025-01-07</div>
                ^^<p>Sentinel 是阿里巴巴开源的分布式服务保护组件，用于微服务架构中的流量控制、服务熔断、系统保护。</p>
                <div class="article-tags">
                    <a href="sentinel-index.html">Sentinel</a>
                    <a href="sentinel-index.html">限流</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>
            <div class="article">
                <h3><a href="c/20241107132139.html">SpringBoot与Apollo集成中Dubbo配置加载失败问题</a></h3>
                <div class="article-meta">发布于：2024-11-07</div>
                <p>Apollo中已配置Dubbo信息，部署时仍报错，分析原因并提供解决方案。</p>
                <div class="article-tags">
                    <a href="#">Spring Boot</a>
                    <a href="#">Apollo</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>
            <div class="article">
                <h3><a href="c/20240911210303.html">线上问题-MySQL死锁</a></h3>
                <div class="article-meta">发布于：2024-09-11</div>
                <p>长事务导致MySQL死锁，分析死锁日志并优化事务管理。</p>
                <div class="article-tags">
                    <a href="mysql-index.html">MySQL</a>
                    <a href="#">死锁</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>
            <div class="article">
                <h3><a href="c/20240815101236.html">Java 22新特性解析</a></h3>
                <div class="article-meta">发布于：2024-08-17</div>
                <p>深入了解Java 22的新特性，包括虚拟线程和结构化并发，提升开发效率。</p>
                <div class="article-tags">
                    <a href="java-new-index.html">Java 22</a>
                    <a href="#">新特性</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>
            <div class="article">
                <h3><a href="c/20240407121309.html">SpringBoot全局异常捕获失效</a></h3>
                <div class="article-meta">发布于：2024-04-06</div>
                <p>文件大小超出限制的异常无法捕获，探讨解决方案和最佳实践。</p>
                <div class="article-tags">
                    <a href="springboot-index.html">Spring Boot</a>
                    <a href="#">自定义异常</a>
                    <a href="#">文件上传</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>
            <div class="article">
                <h3><a href="c/20250308143614.html">凌晨支付异常的线上问题</a></h3>
                <div class="article-meta">发布于：2024-03-08</div>
                <p>凌晨02分，发现支付失败的有告警通知</p>
                <div class="article-tags">
                    <a href="#">支付异常</a>
                    <a href="#">ID生成器</a>
                    <a href="xxljob-sourcel-index.html">XXL-JOB</a>
                    <a href="#">告警优化</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div>
            <!-- 以下文章初始隐藏 -->
            <!--  <div class="article hidden">
                <h3><a href="c/20241210111234.html">Java 23预览特性解析</a></h3>
                <div class="article-meta">发布于：2024-12-10</div>
                <p>探索Java 23的预览特性，包括新的API和性能改进。</p>
                <div class="article-tags">
                    <a href="java-new-index.html">Java 23</a>
                    <a href="#">新特性</a>
                </div>
                <div class="article-share">
                    <a href="#"><i class="fas fa-share-alt"></i></a>
                    <a href="#"><i class="fas fa-thumbs-up"></i></a>
                </div>
            </div> -->

            <div class="loading">
                <i class="fas fa-spinner fa-spin"></i>
            </div>
            <div class="no-more">
                没有更多内容了
            </div>
        </section>
    </main>
    <aside>
        <section class="section hot-posts">
            <h2><i class="fas fa-fire"></i> 热门推荐</h2>
            <ul>
                <li><a href="#">Java并发编程入门</a></li>
                <li><a href="#">Spring Cloud微服务架构</a></li>
                <li><a href="#">Maven高级用法</a></li>
            </ul>
        </section>
        <section class="section tags">
            <h2><i class="fas fa-tags"></i> 热门标签</h2>
            <div>
                <a href="#" class="article-tags">Java</a>
                <a href="#" class="article-tags">Spring</a>
                <a href="#" class="article-tags">微服务</a>
                <a href="#" class="article-tags">Hibernate</a>
                <a href="#" class="article-tags">Maven</a>
            </div>
        </section>
    </aside>
</div>
<footer>
    <div class="social">
        <a href="#" aria-label="WeChat"><i class="fab fa-weixin"></i></a>
        <a href="#" aria-label="Weibo"><i class="fab fa-weibo"></i></a>
        <a href="#" aria-label="QQ"><i class="fab fa-qq"></i></a>
    </div>
    <p>联系方式： | <a href="#">服务条款</a></p>
    <p>© 2025 Java技术站 版权所有</p>
</footer>
<script>
    // 汉堡菜单切换
    const hamburger = document.querySelector('.hamburger');
    const navUl = document.querySelector('nav ul');

    hamburger.addEventListener('click', () => {
        navUl.classList.toggle('active');
    });

    // 移动端下拉菜单切换
    document.querySelectorAll('nav li').forEach(item => {
        item.addEventListener('click', function(e) {
            if (window.innerWidth <= 768) {
                const dropdown = this.querySelector('.dropdown');
                if (dropdown) {
                    e.preventDefault();
                    this.classList.toggle('active');
                }
            }
        });
    });

    // 文章懒加载
    const articles = document.querySelectorAll('.article');
    const loading = document.querySelector('.loading');
    const noMore = document.querySelector('.no-more');
    let loadedCount = 10; // 初始显示10篇

    function loadMoreArticles() {
        if (loadedCount >= articles.length) {
            loading.style.display = 'none';
            noMore.style.display = 'block';
            return;
        }

        loading.style.display = 'block';
        setTimeout(() => {
            for (let i = loadedCount; i < loadedCount + 10 && i < articles.length; i++) {
                articles[i].classList.remove('hidden');
            }
            loadedCount += 10;
            loading.style.display = 'none';
            if (loadedCount >= articles.length) {
                noMore.style.display = 'block';
            }
        }, 1000); // 模拟加载延迟
    }

    window.addEventListener('scroll', () => {
        const scrollPosition = window.scrollY + window.innerHeight;
        const pageHeight = document.body.offsetHeight;
        if (scrollPosition >= pageHeight - 200 && loadedCount < articles.length) {
            loadMoreArticles();
        }
    });
</script>
</body>
</html>